#include <stdio.h>
#include <stdlib.h>
#include "headers/const.h"
#include "headers/position.h"

// Retourne la première ligne vide en fonction d'une colonne donnée
int recupLigne(char grille[LIGNE][COLONNE], int col)
{
	int i;
	i = LIGNE-1;

	while(grille[i][col] != VIDE && i > 0)
		i--; // décremente i pour se placer sur la ligne la plus basse

	if(grille[i][col] == VIDE)
		return i; // retourne la ligne sur laquelle placer le pion
	else 
		return -1; // la colonne est pleine
}

int verifHorizontale(char grille[LIGNE][COLONNE], int ligne, int condArret)
{
	int i = 0, c = 0;

	while(i < COLONNE-1 && c < condArret)
	{
		if(grille[ligne][i] == grille[ligne][i+1] && grille[ligne][i] != VIDE && grille[ligne][i] != NULL) {
			c++;
		}
		else {
			c = 0;
		}
		
		i++;
	}

		if(c == condArret)
			return 1;
		else
			return 0;
}

int verifVerticale(char grille[LIGNE][COLONNE], int col, int condArret)
{
	int i = 0, c = 0;

	while(i < LIGNE-1 && c < condArret)
	{
		if(grille[i][col] == grille[i+1][col] && grille[i][col] != VIDE  && grille[i][col] != NULL)
			c++;
		else
			c = 0;

		i++;
	}

		if(c == condArret)
			return 1;
		else
			return 0;
}

int verifDiagonaleHG(char grille[LIGNE][COLONNE], int ligne, int col, int condArret)
{
	int c = 0; // Compte le nombre de jetons alignés
	
	// On récupère la position de départ de la diagonale en haut à gauche à partir du dernier jeton placé
	while(ligne > 0 && col > 0)
 	{
		ligne--;
		col--;
	}
	
	// On parcours la diagonale
	while((ligne < LIGNE-1 && col < COLONNE-1) && c < condArret)
	{
		if(grille[ligne][col] == grille[ligne+1][col+1] && grille[ligne][col] != VIDE && grille[ligne][col] != NULL)
			c++;
		else
			c = 0;
			
		ligne++;
		col++;
	}

	if(c == condArret)
		return 1;
	else
		return 0;
}

int verifDiagonaleHD(char grille[LIGNE][COLONNE], int ligne, int col, int condArret)
{
	int c = 0; // Compte le nombre de jetons alignés
	
	// On récupère la position de départ de la diagonale en haut à droite à partir du dernier jeton placé
	while(ligne > 0 && col < COLONNE)
 	{
		ligne--;
		col++;
	}

	// On parcours la diagonale
	while((ligne < LIGNE-1 && col > 0) && c < condArret)
	{
		if(grille[ligne][col] == grille[ligne+1][col-1] && grille[ligne][col] != VIDE && grille[ligne][col] != NULL)
			c++;
		else
			c = 0;

		ligne++;
		col--;
	}

	if(c == condArret)
		return 1;
	else
		return 0;
}

int verifPuissance4(char grille[LIGNE][COLONNE], int col, int condArret)
{
	condArret = condArret - 1;
	
	int ligne = recupLigne(grille, col) + 1;

	if(verifVerticale(grille, col, condArret))
		return 1;
	
	if(verifHorizontale(grille, ligne, condArret))
		return 1;

	if(verifDiagonaleHD(grille, ligne, col, condArret))
		return 1;

	if(verifDiagonaleHG(grille, ligne, col, condArret))
		return 1;
		
	return 0;
}
